package br.com.agenda.pages.contato;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.corelib.components.BeanEditForm;
import org.apache.tapestry5.ioc.annotations.Inject;

import br.com.agenda.dao.ContatoDAO;
import br.com.agenda.entities.Contato;
import br.com.agenda.entities.Telefone;

public class Cadastro {

	@Persist
	private Contato contato;

//	private Long contatoId;

	@Persist
	private List<Telefone> telefoneGrid;

	@Component
	private BeanEditForm beanEditForm;	

	@Inject
	private ComponentResources componentResources;

	@Inject
	private ContatoDAO contatoDAO;

	private boolean adicionarTelefonePressed = false;

	@Persist
	@Property
	private Telefone telefone;

	void onSubmit(){
		if(adicionarTelefonePressed){
			adicionarTelefonePressed = false;
		}
		else{
			gravar();

		}
	}

	void gravar(){
		String msg;
		msg=contatoDAO.gravarComTelefones(contato, telefoneGrid);
		if(msg!=null){
			beanEditForm.recordError(msg);
		}else
		{
			limpar();
		}

	}


	void onSelectedFromAdicionarTelefone(){
		adicionarTelefonePressed = true;
		if(contato.getTelefone()!=null && !contato.getTelefone().equals(" ")){
			Telefone telefone =  new Telefone();
			telefone.setNumero(contato.getTelefone());

			if(telefoneGrid==null){
				telefoneGrid =  new ArrayList<Telefone>();
			}
			if(telefoneGrid.contains(telefone)){
				System.out.println("telefone já cadastrado");
			}else{
				telefoneGrid.add(telefone);
			}			
		}
	}

	void onActionFromRemoverTelefone(long id){
		if(telefoneGrid != null && telefoneGrid.size()>0){			
			telefone = null;
			List<Telefone> telListTemp =  new ArrayList<Telefone>();
			for (Telefone telefone : telefoneGrid) {
				telListTemp.add(telefone);
			}

			for (Iterator iterator = telListTemp.iterator(); iterator
			.hasNext();) {
				Telefone telTemp = (Telefone) iterator.next();											

				if(telTemp.getId() == id){
					telefoneGrid.remove(telTemp);
				}
			}

		}
	}

	private void limpar() {
		// TODO Auto-generated method stub
		componentResources.discardPersistentFieldChanges();
	}
//	public Long onPassivate(){
//		return contatoId;
//	}
//	public void onActivate(Long id){
//		contatoId = id;
//		if(contatoId != null && contatoId > 0){
//			contato = (Contato) contatoDAO.getById(contatoId, Contato.class);
//			telefoneGrid = contato.getTelefones();
//		}
//
//	}
	
	void onPrepare(){
		if(telefone == null){
			telefone = new Telefone();
		}
	}

	public Contato getContato() {
		return contato;
	}

	public void setContato(Contato contato) {
		this.contato = contato;
	}

	public List<Telefone> getTelefoneGrid() {
		return telefoneGrid;
	}

	public void setTelefoneGrid(List<Telefone> telefoneGrid) {
		this.telefoneGrid = telefoneGrid;
	}


	
}
